var vis = safari.extension.settings.getItem("showhide"), delay, cache = [];

var url = {

	api:	'http://leprosorium.ru/api/lepropanel',
	things:	'http://leprosorium.ru/my/',
	inbox:	'http://leprosorium.ru/my/inbox/'
};

var lepropanel = {

	/*
		lepropanel.button()
		евент срабатывающий при нажатии на иконку
	*/
	'button' : function(event)
	{
		if (event.command != 'panelshowhide') return false;
		
		this.showhide();
	},
	
	
	/*
		lepropanel.showhide()
		прячет/показывает панельку по запросу
	*/
	'showhide' : function()
	{	
		var bars = safari.extension.bars,
			len = bars.length;
		
		for (var i = len; i--;) 
		{
			vis ? bars[i].hide() : bars[i].show();
		}
		
		 vis = (vis) ? false : true;
		 safari.extension.settings.setItem('showhide', vis); 
	},
	
	/*
		lepropanel.badge()
		циферки на икноке
	*/
	'badge' : function(p, pc, i, ic)
	{
		var what = safari.extension.settings.getItem("badge");
		
		if (what == 4) return false;
		
		switch(what)
		{
			case 1 : var count = p+pc+i+ic;		break;
			case 2 : var count = p+pc;			break;
			case 3 : var count = i+ic;			break;
		}

		var buttons = safari.extension.toolbarItems,
			len = buttons.length;
			
		for (var i = len; i--;)
		{
			buttons[i].badge = count;
		}
	},
	
	/*
		lepropanel.tooltip()
		текст при наведении на иконку, веременно отключенно
	*/
	'tooltip' : function(text)
	{
		var buttons = safari.extension.toolbarItems,
			len = buttons.length;
			
		for (var i = len; i--;)
		{
			buttons[i].toolTip = text;
		}
	},
	
	/*
		lepropanel.links()
		проверяет урл таба, и если он тот же, то открывает ссылку в этом табе, иначе в новом
		также прячет панельку если выставленно в опциях
	*/
	'links' : function(what)
	{
		var curent_url = safari.application.activeBrowserWindow.activeTab.url,
			hide_panel = safari.extension.settings.getItem("hidepanelonclick");
		
		if (curent_url == url[what] || curent_url == "") 
		{
			safari.application.activeBrowserWindow.activeTab.url = url[what];
		}
		else
		{
			safari.application.activeBrowserWindow.openTab().url = url[what];
		}
		
		if (hide_panel) this.showhide();
	},
	
	/*
		lepropanel.fetch()
		это фигня получает данные из api и передаёт lepropanel.parse на обработку
	*/
	'fetch' : function()
	{
		req = new XMLHttpRequest();
        
		req.onreadystatechange = processdata;
		req.open("GET", url.api, true);
		req.send("");

		function processdata()
		{
			if (req.readyState == 4)
			{
				if (req.status == 200) 
				{
					var data = req.responseText;

					if (data.match('<html>'))
					{
						lepropanel.reload(); return;
					}
	            	
					var j = eval('('+data+')');
					
					lepropanel.parse({
						karma: j.karma, rating: j.rating, 
						posts: j.myunreadposts, comms: j.myunreadcomms, 
						iposts: j.inboxunreadposts, icomms: j.inboxunreadcomms,
						karmalast: j.karmavotes.reverse()[0]
					});
				} 
    			
				else 
				{
					lepropanel.reload();
				}
			}
		}
	},
	
	/*
		lepropanel.parse()
		обрабатывает данные и распихивает в нужные места на тулбаре или иконке
	*/
	'parse' : function(j)
	{
		var things	= (j.posts != 0 || j.comms != 0) ? '<span>'+j.posts+' / '+j.comms+'</span>' : '',
			inbox	= (j.iposts != 0 || j.icomms != 0) ? '<span>'+j.iposts+' / '+j.icomms+'</span>' : '',
			rating	= (safari.extension.settings.getItem("showrating")) ? '<li>рейтинг<span>'+j.rating+'</span></li>' : '',
			karma	= (j.karmalast.attitude < 0) ? j.karmalast.login+' -'+j.karmalast.attitude :  j.karmalast.login+' +'+j.karmalast.attitude,
			html	=	'<li onclick="lepropanel.links(\'things\')"><a>мои вещи'+things+'</a></li>'+ 
						'<li onclick="lepropanel.links(\'inbox\')"><a>инбокс'+inbox+'</a></li>'+
						'<li title="'+karma+'">карма<span>'+j.karma+'</span></li>'+rating;

		this.ge('items').innerHTML = html;
		this.badge(parseInt(j.posts), parseInt(j.comms), parseInt(j.iposts), parseInt(j.icomms));
		this.reload();
	},
	
	/*
		lepropanel.reload()
		эта штука пинает api указанное в настройках время
	*/
	'reload' : function()
	{
		delay = setTimeout(function(){
			lepropanel.fetch();
		}, safari.extension.settings.getItem("delay") * 60000);
	},
	
	/*
		lepropanel.ge()
		на всякий случай кэшируем getElementById дабы не напрягать лишнй раз браузер
	*/
	'ge' : function (id)
	{
		return !cache[id] ? cache[id] = document.getElementById(id) : cache[id];
	},
	
	/*
		lepropanel.settings()
		возвращает информацию о включенных лепроскриптах
	*/
	'settings' : function(e)
	{
		if (e.message != 'givemesettings') return false;
		
		var _scripts = {
			microtime:		true,
			fastjepka:		safari.extension.settings.getItem('fastjepka'),
			hidepost:		safari.extension.settings.getItem('hidepost'),
			usernumbers:	safari.extension.settings.getItem('usernumbers'),
			colorizerating:	safari.extension.settings.getItem('colorizerating'),
			newcommnav:		safari.extension.settings.getItem('newcommnav'),
			commpreview:	safari.extension.settings.getItem('commpreview'),
			whoiswho:		safari.extension.settings.getItem('whoiswho'),
			inlineuserinfo:	safari.extension.settings.getItem('inlineuserinfo'),
			attitude:		safari.extension.settings.getItem('attitude'),
			pagetitle:		safari.extension.settings.getItem('pagetitle'),
			reloadbutton:	safari.extension.settings.getItem('reloadbutton'),
			markasread:		safari.extension.settings.getItem('markasread'),
			infinitescroll: safari.extension.settings.getItem('infinitescroll'),
			personalhell:	safari.extension.settings.getItem('personalhell'),
			faces:			safari.extension.settings.getItem('faces')
		}; 
		
		var tabs = safari.application.activeBrowserWindow.tabs, len = tabs.length;
		
		for (var i = len; i--;)
		{
			if (tabs[i].url != undefined)
			{
				tabs[i].page.dispatchMessage("settings", _scripts);
			}
		}
	},
	
	/*
		lepropanel.init()
		срабатывает при открытии окна браузера
	*/
	'init' : function()
	{
		safari.application.addEventListener("command", lepropanel.showhide, false);
		safari.application.addEventListener("message", lepropanel.settings, false);
		vis ? safari.extension.bars[0].show() : safari.extension.bars[0].hide();
		this.fetch();
	}
};

lepropanel.init();